package com.bbva.gptf.back.transformador;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.convert.converter.Converter;

import com.bbva.gptf.dto.bean.InstrumentoMixto;
import com.bbva.gptf.dto.bean.InstrumentosSimulacion;

public class TransformadorInstrumentoMixto implements Converter<List<InstrumentosSimulacion>, List<InstrumentoMixto>> {
	private static final NumberFormat FORMATODECIMAL = new DecimalFormat(
	"###,###,###,###,##0.00");
	private static final NumberFormat FORMATOMONEDA = new DecimalFormat(
		"$###,###,###,###,##0.00");
	private static final NumberFormat FORMATOENTERO = new DecimalFormat(
		"###,###,###,###,##0");
	private static final NumberFormat FORMATOPORCENTAJE = new DecimalFormat(
		"##0.00%");
	private static final NumberFormat FORMATOPORCENTAJENA = new DecimalFormat(
		"##0.00%");

	@Override
	public List<InstrumentoMixto> convert(List<InstrumentosSimulacion> listaIs) {
		List<InstrumentoMixto> listaInstrumentoMixto = new ArrayList<InstrumentoMixto>();
//		for(InstrumentosSimulacion is : listaIs){
//			InstrumentoMixto mixto = new InstrumentoMixto();
//			mixto.setClasificacion(is.getClasificacion());
//			mixto.setTipoContrato(is.getTipoContrato() != null ? is.getTipoContrato().name() : "");
//			mixto.setInstrumento(is.getId() != null ? is.getId() : "");
//			mixto.setCaMontoPesos(aMoneda(is.getInstrumentoActual().getMonto()));
//			mixto.setCaPcIntegracion(aPorcentaje(is.getInstrumentoActual().getPcIntegracion()));
//			mixto.setCaDeltaInstrumento(aEntero(is.getInstrumentoActual().getDelta()));
//			mixto.setCaContribucionDelta(aEntero(is.getInstrumentoActual().getContribucion()));
//			mixto.setCaTasa(aNumero(is.getInstrumentoActual().getTasa()));
//			mixto.setCaPrecio(aMoneda(is.getInstrumentoActual().getPrecio()));
//			mixto.setCaTitulos(aEntero(is.getInstrumentoActual().getTitulos()));
//			mixto.setCaLiquidez(aMoneda(is.getInstrumentoActual().getLiquidez()));
//			mixto.setCaValuacionCartera(aMoneda(is.getInstrumentoActual().getValuacionCartera()));
//			mixto.setCaBenchPcIntegracion(aPorcentaje(is.getInstrumentoActual().getPcIntegracionBenchmark()));
//			mixto.setCaBenchContribucionDelta(aNumero(is.getInstrumentoActual().getContribucionBenchmark()));
//			mixto.setCaDiferenciaPcIntegracion(aPorcentaje(is.getInstrumentoActual().getPcDifIntegracion()));
//			mixto.setCfTitulos(aEntero(is.getInstrumentoObjetivo().getTitulos()));
//			mixto.setCfPrecio(aMoneda(is.getInstrumentoObjetivo().getPrecio()));
//			mixto.setCfMonto(aMoneda(is.getInstrumentoObjetivo().getMonto()));
//			mixto.setCfLiquidez(aMoneda(is.getInstrumentoObjetivo().getLiquidez()));
//			mixto.setCfPcIntegracion(aPorcentaje(is.getInstrumentoObjetivo().getPcDifIntegracion()));
//			mixto.setCfDeltaInstrumento(aNumero(is.getInstrumentoObjetivo().getDelta()));
//			mixto.setCfContribucionDelta(aNumero(is.getInstrumentoObjetivo().getContribucion()));
//			mixto.setCfTasa(aNumero(is.getInstrumentoObjetivo().getTasa()));
//			mixto.setCfValuacionCartera(aMoneda(is.getInstrumentoObjetivo().getValuacionCartera()));
//			mixto.setCfBenchPcIntegracion(aPorcentaje(is.getInstrumentoObjetivo().getPcIntegracionBenchmark()));
//			mixto.setCfDiferenciaPcIntegracion(aPorcentaje(is.getInstrumentoObjetivo().getPcDifIntegracion()));
//			mixto.setMontoOperar(aMoneda(is.getInstrumentoObjetivo().getMontoOperar()));
//			mixto.setCfSubOSobreDeltas(aNumero(is.getInstrumentoObjetivo().getPonderacion()));
//			mixto.setCaSubOSobreDeltas(aNumero(is.getInstrumentoActual().getPonderacion()));
//			listaInstrumentoMixto.add(mixto);
//		}	
		return listaInstrumentoMixto;
	}
	
	private String aEntero(final BigDecimal valor) {
		try {
			return FORMATOENTERO.format(valor != null? valor.doubleValue(): BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}

	private String aMdp(BigDecimal valor) {
		try {
			/*valor = valor.divide(new BigDecimal(1000000.00), 2,
					BigDecimal.ROUND_HALF_UP);*/
			valor=valor.divide(new BigDecimal(1000000.00));
			//return "$".concat(String.valueOf(valor));
			return FORMATOMONEDA.format(valor != null? valor.doubleValue(): BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}

	private String aPorcentaje(final BigDecimal valor) {
		try {
			return FORMATOPORCENTAJE.format(valor != null? valor.doubleValue(): BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}

	private String aPorcentajeNa(final BigDecimal valor) {
		try {
			return FORMATOPORCENTAJENA.format(valor != null? valor.doubleValue()/ 100 : BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}

	private String aMoneda(final BigDecimal valor) {
		try {
			return FORMATOMONEDA.format(valor != null? valor.doubleValue(): BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}

	private String aNumero(final BigDecimal valor) {
		try {
			return FORMATODECIMAL.format(valor != null? valor.doubleValue(): BigDecimal.ZERO.doubleValue());
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}
	
	private String aMoneda(final String valor) {
		try {
			return FORMATOMONEDA.format(Double.parseDouble(valor != null? valor: "0"));
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}
	
	private String aPorcentajeNa(final String valor) {
		try {
			return FORMATOPORCENTAJENA.format(Double.parseDouble(valor != null? valor: "0") / 100);
		} catch (final IllegalArgumentException e) {
			return "";
		}
	}
}
